SwiftUIでAzure Maps iOS SDKを導入する
いわさです。
パブリックプレビューですが、Azure MapsのiOS SDKがリリースされました。
手順としてはパッケージをインストールし、ビューを設定するだけなのですが、公式ドキュメントで案内されているものはStoryboardでの手順です。
私は今回SwiftUIでセットアップしまして、せっかくなので初期導入部分のSwiftUI版手順を共有を兼ねて残しておきます。
SwiftUIが初だと詰まる人いるかもしれません。
Azure Mapsアカウントを作成し共有キーを取得する
ここの手順は通常と同じです。
Azure Mapsアカウントを作成し、共有キーを取得します。
価格レベルの選択については以下を参照してください。
私はGen2で試しました。
共有キー以外にAzureADでの認証も出来るようです。
たしかに、SDK上も初期化処理にAADクライアント、アプリID、テナントIDを使って初期化する構成メソッドも用意されていました。
本日は共有キーを使用しました。
パッケージのインストールと初期化
Xcodeでプロジェクトの初期化をした後、パッケージを追加します。
検索ウインドウにhttps://github.com/Azure/azure-maps-ios-sdk-distribution.git
を入力して直接参照します。
一点注意点があって、Dependency Ruleのバージョンはデフォルトの1.0.0
ではなく1.0.0-pre.1
に変更してください。
1.0.0
のままだと以下のエラーが発生します。
Dependencies could not be resolved because no versions of 'azure-maps-ios-sdk-distribution' match the requirement 1.0.0..<2.0.0 and root depends on 'azure-maps-ios-sdk-distribution' 1.0.0..<2.0.0.
パッケージを追加したら、先程取得した共有キーを使って初期化処理を行います。
Storyboardの手順では、AppDelegate.swift
で初期化するよう案内があります。
SwiftUIの場合はUIApplicationDelegateAdaptor
を使って同様の処理を行うことが出来ます。
以下を参考にさせて頂きました。
以下のハイライト部分が追記した部分となります。
configureメソッドの引数は共有キーです。
import SwiftUI import AzureMapsControl @main struct iwasa_azure_mapsApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } } } class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { AzureMaps.configure(subscriptionKey:"hogehogehogehogehogehogehogehogehogehoge") return true } }
ビューの追加
次に、MacControlビューを追加します。
Storyboardの場合は、ViewControlにUIViewを追加してクラスとモジュールを指定するだけで良いです。
SwiftUIでUIViewを使う場合は、UIViewRepresentable
プロトコルを実装したクラスを作成し、MapControlをラップしてやることでSwitfUIで利用することが出来ます。
こちらは以下を参考にさせて頂きました。
ハイライト部分が追記した部分となります。
import SwiftUI import AzureMapsControl struct ContentView: View { var body: some View { AzureMap() } } struct AzureMap: UIViewRepresentable { func makeUIView(context: Context) -> MapControl { return MapControl() } func updateUIView(_ uiView: MapControl, context: Context) { } }
実行
ここまでで公式ドキュメントのStoryboardと同内容のSwiftUI版手順となります。
実行してみます。
確認することが出来ました。
まとめ
- StoryboardとSwiftUIで結構手順は変わる
- SwiftUIでもAzure Maps iOS SDKは動作可能
導入出来たので色々カスタマイズして遊ぶ予定です。